package com.huntech.log.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;

/**
 * 日志文件处理工具类
 */
@Slf4j
public class LogFileUtil {

    /**
     * 最大日志长度
     */
    private static final int MAX_LENGTH = 16000;

    /**
     * 获取服务名
     */
    public static String getServerName(MultipartFile file) {
        String filename = file.getOriginalFilename();
        if (filename != null) {
            // 删除后缀
            filename = filename.substring(0, filename.lastIndexOf("."));
            // 替换下划线
            return filename.replaceAll("-", "_");
        }
        return "";
    }

    /**
     * 转义SQL中的特殊字符
     */
    public static String escapeSpecialChars(String input) {
        if (input == null) {
            return null;
        }
        return input
                .replace("\\", "\\\\")  // 反斜杠
                .replace("'", "''")     // 单引号
                .replace("\"", "\\\"")  // 双引号
                .replace("\0", "\\0")   // NULL字符
                .replace("\b", "\\b")   // 退格符
                .replace("\n", "\\n")   // 换行符
                .replace("\r", "\\r")   // 回车符
                .replace("\t", "\\t")   // 制表符
                .replace("\u001A", "\\Z") // Ctrl+Z/EOF
                .replace(";", "\\;");   // 分号
    }

    /**
     * 截断超长日志消息
     */
    public static String truncateLogMessage(String message, int lineCount) {
        if (message != null && message.length() > MAX_LENGTH) {
            log.warn("Log message truncated from {} to {} characters at line {}", message.length(), MAX_LENGTH, lineCount);
            return message.substring(0, MAX_LENGTH) + "...[TRUNCATED]";
        }
        return message;
    }
}
